//package com.gobang.controller;
//
//import com.gobang.domain.message.GameStateRequestMessage;
//import com.gobang.domain.message.MoveRequestMessage;
//import com.gobang.domain.dto.MoveResponseDTO;
//import com.gobang.service.MessageService;
//import com.gobang.service.NewGameService;
//import lombok.RequiredArgsConstructor;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.messaging.handler.annotation.MessageMapping;
//import org.springframework.messaging.handler.annotation.Payload;
//import org.springframework.stereotype.Controller;
//
//import java.security.Principal;
//
///**
// * WebSocket游戏控制器
// * 处理WebSocket游戏消息
// *
// * @author System
// * @since 1.0.0
// */
//@Controller
//@RequiredArgsConstructor
//public class GameWebSocketController {
//
//    private static final Logger log = LoggerFactory.getLogger(GameWebSocketController.class);
//
//    private final NewGameService gameService;
//    private final MessageService messageService;
//
//    /**
//     * 处理落子请求
//     *
//     * @param message 落子消息
//     * @param principal 用户认证信息
//     */
////    @MessageMapping("/game/move")
////    public void handleMove(@Payload MoveRequestMessage message, Principal principal) {
////        try {
////            log.info("收到落子请求，message: {}, user: {}", message, principal.getName());
////
////            Long userId = Long.valueOf(principal.getName());
////            String roomId = message.getRoomId();
////            int row = message.getRow();
////            int col = message.getCol();
////
////            // 处理落子
////            MoveResponseDTO response = gameService.makeMove(roomId, userId, row, col);
////
////            // 发送落子响应
////            sendMoveResponse(roomId, response);
////
////            // 如果游戏结束，发送游戏结束通知
////            if (response.getIsGameOver()) {
////                gameService.handleGameOver(roomId, response.getWinnerId());
////                sendGameOverNotification(roomId, response);
////            }
////
////        } catch (Exception e) {
////            log.error("处理落子请求失败", e);
////            // 发送错误响应
////            sendMoveError(message.getRoomId(), e.getMessage());
////        }
////    }
//
//    /**
//     * 请求游戏状态
//     *
//     * @param message 请求消息
//     * @param principal 用户认证信息
//     */
//    @MessageMapping("/game/state")
//    public void requestGameState(@Payload GameStateRequestMessage message, Principal principal) {
//        try {
//            log.info("收到游戏状态请求，message: {}, user: {}", message, principal.getName());
//
//            Long userId = Long.valueOf(principal.getName());
//            String roomId = message.getRoomId();
//
//            // 获取游戏状态
//            NewGameService.GameStateUpdateMessage stateUpdate = gameService.getGameState(roomId, userId);
//
//            // 发送状态更新
//            sendGameStateUpdate(roomId, stateUpdate);
//
//        } catch (Exception e) {
//            log.error("获取游戏状态失败", e);
//            sendError(message.getRoomId(), e.getMessage());
//        }
//    }
//
//    /**
//     * 发送落子响应
//     */
//    private void sendMoveResponse(String roomId, MoveResponseDTO response) {
//        try {
//            // 构建WebSocket响应消息
//            MoveResponseMessage wsMessage = new MoveResponseMessage(response);
//
//            // 发送到房间内所有用户
//            messageService.sendToRoom(roomId, wsMessage);
//
//            log.debug("落子响应已发送，roomId: {}", roomId);
//
//        } catch (Exception e) {
//            log.error("发送落子响应失败，roomId: {}", roomId, e);
//        }
//    }
//
//    /**
//     * 发送游戏结束通知
//     */
//    private void sendGameOverNotification(String roomId, MoveResponseDTO response) {
//        try {
//            // 构建游戏结束消息
//            GameOverMessage gameOverMessage = new GameOverMessage(
//                roomId,
//                response.getWinnerId(),
//                response.getGameStatus()
//            );
//
//            // 发送到房间内所有用户
//            messageService.sendToRoom(roomId, gameOverMessage);
//
//            log.info("游戏结束通知已发送，roomId: {}, winnerId: {}", roomId, response.getWinnerId());
//
//        } catch (Exception e) {
//            log.error("发送游戏结束通知失败，roomId: {}", roomId, e);
//        }
//    }
//
//    /**
//     * 发送游戏状态更新
//     */
//    private void sendGameStateUpdate(String roomId, NewGameService.GameStateUpdateMessage stateUpdate) {
//        try {
//            // 发送到房间内所有用户
//            messageService.sendToRoom(roomId, stateUpdate);
//
//            log.debug("游戏状态更新已发送，roomId: {}", roomId);
//
//        } catch (Exception e) {
//            log.error("发送游戏状态更新失败，roomId: {}", roomId, e);
//        }
//    }
//
//    /**
//     * 发送落子错误响应
//     */
//    private void sendMoveError(String roomId, String errorMessage) {
//        try {
//            MoveResponseDTO errorResponse = MoveResponseDTO.builder()
//                .roomId(roomId)
//                .success(false)
//                .errorMessage(errorMessage)
//                .build();
//
//            MoveResponseMessage wsMessage = new MoveResponseMessage(errorResponse);
//            messageService.sendToRoom(roomId, wsMessage);
//
//            log.debug("落子错误响应已发送，roomId: {}", roomId);
//
//        } catch (Exception e) {
//            log.error("发送落子错误响应失败，roomId: {}", roomId, e);
//        }
//    }
//
//    /**
//     * 发送通用错误消息
//     */
//    private void sendError(String roomId, String errorMessage) {
//        try {
//            ErrorMessage errorMsg = new ErrorMessage(errorMessage);
//            messageService.sendToRoom(roomId, errorMsg);
//
//            log.debug("错误消息已发送，roomId: {}", roomId);
//
//        } catch (Exception e) {
//            log.error("发送错误消息失败，roomId: {}", roomId, e);
//        }
//    }
//
//    /**
//     * WebSocket落子响应消息
//     */
//    public static class MoveResponseMessage {
//        private String type = "MOVE_RESPONSE";
//        private MoveResponseDTO data;
//
//        public MoveResponseMessage(MoveResponseDTO data) {
//            this.data = data;
//        }
//
//        public String getType() { return type; }
//        public MoveResponseDTO getData() { return data; }
//    }
//
//    /**
//     * WebSocket游戏结束消息
//     */
//    public static class GameOverMessage {
//        private String type = "GAME_OVER";
//        private GameOverData data;
//
//        public GameOverMessage(String roomId, Long winnerId, String gameStatus) {
//            this.data = new GameOverData(roomId, winnerId, gameStatus);
//        }
//
//        public String getType() { return type; }
//        public GameOverData getData() { return data; }
//
//        public static class GameOverData {
//            private String roomId;
//            private Long winnerId;
//            private String gameStatus;
//
//            public GameOverData(String roomId, Long winnerId, String gameStatus) {
//                this.roomId = roomId;
//                this.winnerId = winnerId;
//                this.gameStatus = gameStatus;
//            }
//
//            // Getters
//            public String getRoomId() { return roomId; }
//            public Long getWinnerId() { return winnerId; }
//            public String getGameStatus() { return gameStatus; }
//        }
//    }
//
//    /**
//     * WebSocket错误消息
//     */
//    public static class ErrorMessage {
//        private String type = "ERROR";
//        private String message;
//
//        public ErrorMessage(String message) {
//            this.message = message;
//        }
//
//        public String getType() { return type; }
//        public String getMessage() { return message; }
//    }
//}